DFROBOT SEN0409 Gravity:I2C LIS2DW12三轴加速度传感器 产品资料 使用教程 您所在的位置:网站首页 树莓派4b 耗电量 DFROBOT SEN0409 Gravity:I2C LIS2DW12三轴加速度传感器 产品资料 使用教程

DFROBOT SEN0409 Gravity:I2C LIS2DW12三轴加速度传感器 产品资料 使用教程

#DFROBOT SEN0409 Gravity:I2C LIS2DW12三轴加速度传感器 产品资料 使用教程| 来源: 网络整理| 查看: 265

三轴加速度计

产品简介

LIS2DW12三轴加速度计是一款超低功耗的线性加速度计,该传感器拥有两个独立的可编程中断及专用内部引擎,可实现超多功能,例如自由落体检测、纵向/横向检测、朝向检测、可配置的单击/双击识别、运动检测、运动唤醒以实现高级省电等。我们为您提供了以上功能的示例程序,方便您在项目中轻松使用。 该传感器具有±2g /±4g /±8g /±16g的用户可选全刻度,并能够以1.6 Hz至1600 Hz的输出数据速率测量加速度。它内置多种带宽的多种运行模式,您可以按需选择合适的模式。

注意:Gravity版本没有引出两个可编程中断引脚,若需要使用外部中断的高级功能,请购买Breakout版本

特性 可选量程:±2g /±4g /±8g /±16g 16位数据输出 简单易用的Gravity接口,无需焊接 拨扭开关可方便切换I2C地址 技术规格 工作电压:3.3V~5V 工作电流:8~10uA(低功耗低噪声模式)/0.12mA(高性能模式) 接口方式:Gravity-I2C接口 I2C地址:0x19(默认地址)/0x18(可选) 可选标尺:±2g /±4g /±8g /±16g 频率:1.6Hz~1600Hz 16位数据输出 睡眠唤醒功能 超低噪声:1.3 mg RMS(低功耗模式) 32级FIFO(先进先出缓冲区) 万克高抗撞击能力 ECOPACK®RoHS和“绿色”标准 工作温度:-40℃~+85℃ 模块尺寸:27 x 27(mm) 安装孔尺寸:内径3.1mm/外径6mm 应用 自由落体检测 运动检测及记录 单击/双击检测 自平衡机器人 飞行器 人体动作识别 空气鼠标 游戏手柄 冲击检测及记录 引脚说明 序号 丝印 功能描述 1 VCC/+ 5V / 3V3 2 GND/- GND 3 SCL/C I2C时钟线 4 SDA/D I2C数据线

注意:拨钮开关可选择I2C地址为0x18或0x19。micro:bit(v1.5版本)的I2C地址与传感器I2C地址0x19冲突,所以请选择0x18。

M0使用教程

请按接线图所示将传感器与M0(或其它主板)相连接即可。

准备 硬件 1 x Firebeetle Board-M0 1 x LIS2DW12三轴加速度计 若干 杜邦线 软件 Arduino IDE, 点击下载Arduino IDE LIS系列库文件和示例程序

关于如何安装库文件,点击链接

样例代码

样例代码1-读取x,y,z轴加速度(getAcceleration.ino) 样例代码2-睡眠唤醒功能(wakeUp.ino) 样例代码3-敲击检测功能(tap.ino) 样例代码4-敲击中断功能(tapInterrupt.ino) (仅Breakout版本可使用) 样例代码5-自由落体检测功能(freeFall.ino) 样例代码6-自由落体中断功能(freeFallInterrupt.ino) (仅Breakout版本可使用) 样例代码7-运动检测功能(activityDetect.ino) 样例代码8-朝向检测功能(orientation.ino)

主要API接口函数列表

DFRobot_LIS2DW12(); /** * @brief Initialize the function * @return true(Initialization succeed)/fasle(Initialization failed) */ bool begin(void); /** * @brief Get chip id * @return 8 bit serial number */ uint8_t getID(); /** * @brief Software reset to restore the value of all registers to the default value */ void softReset(); /** * @brief Enable the chip to continuously collect data * @param enable true(continuous update)/false( output registers not updated until MSB and LSB read) */ void continRefresh(bool enable); /** * @brief Set the filter processing mode * @param path path of filtering eLPF = 0x00,/< low-pass filter path selected>/ eHPF = 0x10,// */ void setFilterPath(ePath_t path); /** * @brief Set the bandwidth of the data * @param bw bandwidth eRateDiv_2 ,// eRateDiv_4 ,/* eRateDiv_10 ,// eRateDiv_20 ,// */ void setFilterBandwidth(eBWFilter_t bw); /** * @brief Set power mode, there are two modes for the sensor to measure acceleration * @n 1.Continuous measurement In this mode, the sensor will continuously measure and store data in its register * @n 2.Single data conversion on demand mode In this mode, the sensor will not make a measurement unless it receives an external request * @param mode power modes to choose from eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ void setRange(eRange_t range); /** * @brief Enable detect tap events in the Z direction * @param enable ture(Enable tap detection)\false(Disable tap detection) */ void enableTapDetectionOnZ(bool enable); /** * @brief Enable detect tap events in the Y direction * @param enable ture(Enable tap detection)\false(Disable tap detection) */ void enableTapDetectionOnY(bool enable); /** * @brief Enable detect tap events in the X direction * @param enable ture(Enable tap detection)\false(Disable tap detection) */ void enableTapDetectionOnX(bool enable); /** * @brief Set the tap threshold in the X direction * @param th Threshold(mg),Can only be used in the range of 0~2g */ void setTapThresholdOnX(float th); /** * @brief Set the tap threshold in the Y direction * @param th Threshold(mg),Can only be used in the range of 0~2g */ void setTapThresholdOnY(float th); /** * @brief Set the tap threshold in the Z direction * @param th Threshold(mg),Can only be used in the range of 0~2g */ void setTapThresholdOnZ(float th); /** * @brief Duration of maximum time gap for double-tap recognition. When double-tap * @n recognition is enabled, this register expresses the maximum time between two * @n successive detected taps to determine a double-tap event. * @param dur duration, range:0~15 * @n time = dur * (1/rate)(unit:s) | An example of a linear relationship between an argument and time | |------------------------------------------------------------------------------------------------------------------------| | | | | | | | Data rate | 25 Hz | 100 Hz | 400 Hz | = 800 Hz | |------------------------------------------------------------------------------------------------------------------------| | time |dur*(1s/25)= dur*40ms| dur*(1s/100)= dur*10ms | dur*(1s/400)= dur*2.5ms | dur*(1s/800)= dur*1.25ms | |------------------------------------------------------------------------------------------------------------------------| */ void setTapDur(uint8_t dur); /** * @brief Set the tap detection mode, detect single tap or both single tap and double tap * @param mode Tap detection mode eOnlySingle // eBothSingleDouble // */ void setTapMode(eTapMode_t mode); /** * @brief Set Thresholds for 4D/6D, when the threshold of rotation exceeds the specified angle, a direction change event will occur. * @param degree eDegrees80 // eDegrees70 // eDegrees60 // eDegrees50 // */ void set6DThreshold(e6DTh_t degree); /** * @brief Read the acceleration in the x direction * @return Acceleration data from x(mg), the measurement range is ±2g, ±4g, ±8g or ±16g, set by the setRange() funciton. */ int16_t readAccX(); /** * @brief Read the acceleration in the y direction * @return Acceleration data from y(mg), the measurement range is ±2g, ±4g, ±8g or ±16g, set by the setRange() funciton. */ int16_t readAccY(); /** * @brief Read the acceleration in the z direction * @return Acceleration data from z(mg), the measurement range is ±2g, ±4g, ±8g or ±16g, set by the setRange() funciton. */ int16_t readAccZ(); /** * @brief Detect motion * @return true(Motion generated)/false(No motion) */ bool actDetected(); /** * @brief Detect free fall * @return true(Free-fall detected)/false(No free-fall) */ bool freeFallDetected(); /** * @brief Detect whether the direction of the chip changes when the chip is facing up/down/left/right/forward/back (ie 6D) * @return true(a change in position detected)/false(no event detected) */ bool oriChangeDetected(); /** * @brief Only in 6D (facing up/down/left/right/forward/backward) state can the function get the orientation of the sensor relative to the positive z-axis. * @return eXDown // eXUp // eYDown // eYUp // eZDown // eZUp // */ eOrient_t getOrientation(); /** * @brief Tap detection, can detect it is double tap or single tap * @return eSTap // eDTap // eNoTap, //No tap */ eTap_t tapDetect(); /** * @brief Tap direction source detection * @return eDirXUp // eDirXDown // eDirYUp // eDirYDown // eDirZUp // eDirZDown // */ eTapDir_t getTapDirection(); /** * @brief Wake-up motion direction detection * @return eDirX // eDirY // eDirZ // eDirError,// */ eWakeUpDir_t getWakeUpDir(); /** * @brief In Single data conversion on demand mode, request a measurement. */ void demandData(); 样例代码1-读取x,y,z轴加速度(getAcceleration.ino) 选择getAcceleration.ino

烧录程序 /**! * @file getAcceleration.ino * @brief Get the acceleration in the three directions of xyz, the range can be ±2g, ±4g, ±8g or ±16g, set by the setRange() function * @n In this example, the continuous measurement mode is selected by default -- the acceleration data will be measured continuously according to the measuring rate. * @n You can also use the single data conversion on demand mode 1. You need to select a suitable conversion mode in the setPowerMode() function * @n 2. Fill in the setDataRate() function with the eSetSwTrig parameter * @n 3. Request a measurement by the demandData() function * @n When using SPI, chip select pin can be modified by changing the value of LIS2DW12_CS * @copyright Copyright (c) 2010 DFRobot Co.Ltd (https://www.dfrobot.com) * @licence The MIT License (MIT) * @author [fengli]([email protected]) * @version V1.0 * @date 2021-01-16 * @get from https://www.dfrobot.com * @https://github.com/DFRobot/DFRobot_LIS */ #include //When using I2C communication, use the following program to construct an object by DFRobot_LIS2DW12_I2C /*! * @brief Constructor * @param pWire I2c controller * @param addr I2C address(0x18/0x19) */ //DFRobot_LIS2DW12_I2C acce(&Wire,0x18); DFRobot_LIS2DW12_I2C acce; //When using SPI communication, use the following program to construct an object by DFRobot_LIS2DW12_SPI #if defined(ESP32) || defined(ESP8266) #define LIS2DW12_CS D3 #elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO) #define LIS2DW12_CS 3 #elif (defined NRF5) #define LIS2DW12_CS 2 //The pin on the development board with the corresponding silkscreen printed as P2 #endif /*! * @brief Constructor * @param cs Chip selection pinChip selection pin * @param spi SPI controller */ //DFRobot_LIS2DW12_SPI acce(/*cs = */LIS2DW12_CS,&SPI); //DFRobot_LIS2DW12_SPI acce(/*cs = */LIS2DW12_CS); void setup(void){ Serial.begin(9600); while(!acce.begin()){ Serial.println("Communication failed, check the connection and I2C address setting when using I2C communication."); delay(1000); } Serial.print("chip id : "); Serial.println(acce.getID(),HEX); //Chip soft reset acce.softReset(); //Set whether to collect data continuously acce.continRefresh(true); /**! Set the sensor data collection rate: eRate_0hz // eRate_1hz6 // eRate_12hz5 // eRate_25hz eRate_50hz eRate_100hz eRate_200hz eRate_400hz // eRate_800hz // eRate_1k6hz // eSetSwTrig // */ acce.setDataRate(DFRobot_LIS2DW12::eRate_50hz); /**! Set the sensor measurement range: e2_g // e4_g // e8_g // e16_g /< ±16g>/ */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Filter settings: eLPF (Low pass filter) eHPF (High pass filter) */ acce.setFilterPath(DFRobot_LIS2DW12::eLPF); /**! Set bandwidth: eRateDiv_2 // eRateDiv_4 /* eRateDiv_10 // eRateDiv_20 /< Rate/20 (HP/LP)>/ */ acce.setFilterBandwidth(DFRobot_LIS2DW12::eRateDiv_4); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setFilterBandwidth(DFRobot_LIS2DW12::eRateDiv_4); /** Wake-up duration: when using the detection mode of eDetectAct in the setActMode() function, it will collect data at a normal rate after the chip is awakened. Then after a period of time, the chip will continue to hibernate, collecting data at a frequency of 12.5hz. dur (0 ~ 3) time = dur * (1/Rate)(unit:s) | An example of a linear relationship between an argument and time | |------------------------------------------------------------------------------------------------------------------------| | | | | | | | Data rate | 25 Hz | 100 Hz | 400 Hz | = 800 Hz | |------------------------------------------------------------------------------------------------------------------------| | time |dur*(1s/25)= dur*40ms| dur*(1s/100)= dur*10ms | dur*(1s/400)= dur*2.5ms | dur*(1s/800)= dur*1.25ms | |------------------------------------------------------------------------------------------------------------------------| */ acce.setWakeUpDur(/*dur = */2); //Set wakeup threshold, when the acceleration change exceeds this value, the eWakeUp event will be triggered, unit:mg //The value is within the range. acce.setWakeUpThreshold(/*threshold = */0.2); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit /


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有